﻿#include "common.h"
#include <QGraphicsDropShadowEffect>
#include <QApplication>
#include <QPalette>


int nbDigitsFromNbLines(size_t nbLines)
{
	int nbDigits = 0; // minimum number of digit should be 4
	if (nbLines < 10) nbDigits = 1;
	else if (nbLines < 100) nbDigits = 2;
	else if (nbLines < 1000) nbDigits = 3;
	else if (nbLines < 10000) nbDigits = 4;
	else if (nbLines < 100000) nbDigits = 5;
	else if (nbLines < 1000000) nbDigits = 6;
	else // rare case
	{
		nbDigits = 7;
		nbLines /= 1000000;

		while (nbLines)
		{
			nbLines /= 10;
			++nbDigits;
		}
	}
	return nbDigits;
}

// 为QWidget类型的对话框添加边框和阴影效果
void applyDialogStyle(QWidget* widget)
{
	if (!widget)
		return;
	
	// 只对顶层窗口应用样式,不对嵌入式子部件应用
	// 如果widget有父窗口且不是顶层窗口,则不应用样式
	if (widget->parentWidget() != nullptr && !widget->isWindow()) {
		return;
	}
	
	// 创建阴影效果
	QGraphicsDropShadowEffect* shadowEffect = new QGraphicsDropShadowEffect(widget);
	shadowEffect->setBlurRadius(20);        // 阴影模糊半径
	shadowEffect->setOffset(0, 3);          // 阴影偏移量
	shadowEffect->setColor(QColor(0, 0, 0, 100)); // 阴影颜色(半透明黑色)
	
	// 应用阴影效果
	widget->setGraphicsEffect(shadowEffect);
	
	// 添加边框样式
	QString styleSheet = widget->styleSheet();
	
	// 检查是否已经有样式,如果有则追加,否则新建
	QString borderStyle = R"(
		QWidget {
			border: 1px solid #c0c0c0;
			border-radius: 8px;
			background-color: palette(window);
		}
	)";
	
	if (!styleSheet.isEmpty()) {
		styleSheet += "\n" + borderStyle;
	} else {
		styleSheet = borderStyle;
	}
	
	widget->setStyleSheet(styleSheet);
}

// 为QDialog类型的对话框添加边框和阴影效果
void applyDialogStyle(QDialog* dialog)
{
	if (!dialog)
		return;
	
	// 只对顶层窗口应用样式,不对嵌入式子部件应用
	// QDialog通常都是顶层窗口,但为了保险起见也检查一下
	if (dialog->parentWidget() != nullptr && !dialog->isWindow()) {
		return;
	}
	
	// 创建阴影效果
	QGraphicsDropShadowEffect* shadowEffect = new QGraphicsDropShadowEffect(dialog);
	shadowEffect->setBlurRadius(20);        // 阴影模糊半径
	shadowEffect->setOffset(0, 3);          // 阴影偏移量
	shadowEffect->setColor(QColor(0, 0, 0, 100)); // 阴影颜色(半透明黑色)
	
	// 应用阴影效果
	dialog->setGraphicsEffect(shadowEffect);
	
	// 添加边框样式
	QString styleSheet = dialog->styleSheet();
	
	// 检查是否已经有样式,如果有则追加,否则新建
	QString borderStyle = R"(
		QDialog {
			border: 2px solid #a0a0a0;
			border-radius: 10px;
			background-color: palette(window);
		}
	)";
	
	if (!styleSheet.isEmpty()) {
		styleSheet += "\n" + borderStyle;
	} else {
		styleSheet = borderStyle;
	}
	
	dialog->setStyleSheet(styleSheet);
}